using System;

using ClasesPersistentes.Excepciones;

namespace ClasesPersistentes
{
	/// <summary>
	/// Description of Producto.
	/// </summary>
	public class Producto
	{		
		#region Variables de usuario
		/// <summary>
		/// Codigo del producto. 
		/// </summary>
		protected int codigo;
		
		/// <summary>
		/// Descripcion, nombre por el cual es conocido el producto.
		/// </summary>
		protected string descripcion;
		
		/// <summary>
		/// Cantidad de producto en stock actualmente.
		/// </summary>
		protected int stockActual;
		
		/// <summary>
		/// 
		/// </summary>
		protected int stockDeseado;
		
		/// <summary>
		/// Precio unitario del producto.
		/// </summary>
		protected decimal precio;
		
		#endregion
		
		#region Constructores
		/// <summary>
		/// Constructor por defecto.
		/// </summary>
		public Producto(int codigo, string descripcion)
		{
			this.codigo = codigo;
			this.descripcion = descripcion;
		}
		
		public Producto(int codigo, string descripcion, int stockActual,
		               int stockDeseado, decimal precio)
		{
			this.codigo = codigo;
			this.descripcion = descripcion;
			this.stockActual = stockActual;
			this.stockDeseado = stockDeseado;
			this.precio = precio;
		}
		
		#endregion
				
		#region Propiedades
		public int Codigo {
			get { return this.codigo; }
			set { this.codigo = value; }
		}
		
		public string Descripcion {
			get { return this.descripcion; }
			set { this.descripcion = value; }
		}
		
		public int StockActual {
			get { return this.stockActual; }
			set { this.stockActual = value; }
		}
		
		public decimal Precio {
			get { return this.precio; }
			set { this.precio = value; }
		}
		
		public int StockDeseado {
			get { return this.stockDeseado; }
			set { this.stockDeseado = value; }
		}
		#endregion
		
		#region Metodos Publicos
		
		public override bool Equals (object o)
		{
			Producto p = (Producto) o;
			
			if (this.codigo != p.codigo)
				return false;
			if (this.descripcion != p.descripcion)
				return false;
			return true;
		}
		
		#endregion
	}
}
